// 引入接口请求工具
const request = require("../../utils/request.js");
// dish.js 中获取分类的方法
getCategoryList(); {
  const that = this;
  let retryCount = 0;
  const maxRetry = 2; // 最多重试2次
  
  function request() {
    wx.request({
      url: "http://localhost:8080/api/category/list", // 正确的本地接口地址
      success: (res) => {
        if (res.data.code === 200) {
          that.setData({ categoryList: res.data.data });
        } else {
          wx.showToast({ title: "获取分类失败", icon: "none" });
        }
      },
      fail: (err) => {
        if (retryCount < maxRetry) {
          retryCount++;
          request(); // 重试
        } else {
          wx.showToast({ title: "获取分类失败，请检查网络", icon: "none" });
          console.error("获取分类失败：", err);
        }
      }
    });
  }
  
  request(); // 首次请求
}
Page({
  /**
   * 页面初始数据
   */
  data: {
    categoryList: [],        // 分类列表
    currentCategoryId: 0,    // 当前选中分类ID（0为“全部”）
    dishList: [],            // 菜品列表
    pageNum: 1,              // 当前页码（分页用）
    pageSize: 10,            // 每页条数
    total: 0,                // 菜品总条数（判断是否还有更多数据）
    isLoading: false,        // 是否正在加载
    searchKey: ""            // 搜索关键词
  },

  /**
   * 生命周期函数：页面加载时触发
   */
  onLoad(options) {
    // 1. 加载分类列表
    this.getCategoryList();
    // 2. 加载默认分类（全部）的菜品
    this.getDishList();
  },

  /**
   * 1. 获取分类列表（调用后端接口）
   */
  async getCategoryList() {
    try {
      const res = await request.get("/api/category/list"); // 开发C提供的分类接口
      // 拼接“全部”分类在最前面
      const allCategory = { id: 0, name: "全部" };
      this.setData({
        categoryList: [allCategory, ...res]
      });
    } catch (err) {
      console.error("获取分类失败：", err);
    }
  },

  /**
   * 2. 获取菜品列表（支持分类、搜索、分页）
   */
  async getDishList() {
    // 避免重复加载
    if (this.data.isLoading) return;
    // 若当前页 >= 总页数，停止加载
    if (this.data.pageNum > Math.ceil(this.data.total / this.data.pageSize)) {
      return;
    }

    this.setData({ isLoading: true });
    try {
      const { currentCategoryId, searchKey, pageNum, pageSize } = this.data;
      // 构造请求参数
      const params = {
        categoryId: currentCategoryId,
        keyword: searchKey,
        pageNum,
        pageSize
      };
      // 调用后端菜品接口
      const res = await request.get("/api/dish/list", params);
      // 拼接菜品列表（下拉刷新时重置，上拉加载时追加）
      this.setData({
        dishList: pageNum === 1 ? res.list : [...this.data.dishList, ...res.list],
        total: res.total, // 后端返回的总条数
        pageNum: pageNum + 1, // 页码+1，为下一次加载做准备
        isLoading: false
      });
      // 停止下拉刷新动画
      wx.stopPullDownRefresh();
    } catch (err) {
      console.error("获取菜品失败：", err);
      this.setData({ isLoading: false });
      wx.stopPullDownRefresh();
    }
  },

  /**
   * 3. 切换分类（点击分类导航时触发）
   */
  switchCategory(e) {
    const categoryId = e.currentTarget.dataset.id;
    // 若点击当前分类，不重复加载
    if (categoryId === this.data.currentCategoryId) return;
    // 重置页码和菜品列表，加载新分类的菜品
    this.setData({
      currentCategoryId: categoryId,
      pageNum: 1,
      dishList: []
    });
    this.getDishList();
  },

  /**
   * 4. 搜索输入（实时搜索）
   */
  onSearchInput(e) {
    const searchKey = e.detail.value.trim();
    // 重置页码和菜品列表，加载搜索结果
    this.setData({
      searchKey,
      pageNum: 1,
      dishList: []
    });
    this.getDishList();
  },

  /**
   * 5. 下拉刷新（触发时重新加载当前分类的菜品）
   */
  onPullDownRefresh() {
    this.setData({
      pageNum: 1,
      dishList: []
    });
    this.getDishList();
  },

  /**
   * 6. 上拉加载更多（滚动到底部时触发）
   */
  onReachBottom() {
    this.getDishList();
  },

  /**
   * 7. 加入购物车（监听菜品卡片组件的事件）
   */
  async handleAddCart(e) {
    const dishId = e.detail.dishId; // 从组件传递的参数中获取菜品ID
    try {
      // 调用后端“加入购物车”接口
      await request.post("/api/cart/add", {
        dishId,
        quantity: 1 // 默认加1份，可扩展为支持自定义数量
      });
      // 提示成功
      wx.showToast({ title: "已加入购物车" });
    } catch (err) {
      console.error("加入购物车失败：", err);
    }
  }
}
);